<?php
/**
 * Description of InteresseDAO
 *
 * @author Magno
 */
class InteresseDAO {

    private $conexao;
    private $categoriaProdutoDAO;
    private $clienteDAO;

    public function __construct() {
        $this->conexao = Conexao::getConexao();
        $this->categoriaProdutoDAO = new CategoriaProdutoDAO();
        $this->clienteDAO = new ClienteDAO();
    }

    public function salvar($interesse) {

        try {

            if ($this->existe($interesse->getCategoriaProduto()->getCategoriaProdutoID(), $interesse->getCliente()->getUsuarioID())) {
                //não tem edição
                return $interesse;
            } else {

                $statment = $this->conexao->prepare("INSERT INTO interesse(categoriaProdutoID,usuarioID)
                    VALUES (:categoriaProdutoID,:usuarioID);");
            }

            if ($statment->execute($interesse->toBD())) {

                if ($interesse->getInteresseID() == null || $interesse->getInteresseID() <= 0)
                    $interesse->setInteresseID($this->conexao->lastInsertId());
                return $interesse;
            }else {
                $erros = $statment->errorInfo();
                throw new Exception("Erro InteresseDAO: " . $erros[2]);
            }
        } catch (PDOException $err) {
            throw new Exception("Erro InteresseDAO:" . $err->getMessage());
        }
    }

    public function excluir($categoriaProdutoID, $usuarioID) {

        try {

            $statment = $this->conexao->prepare("DELETE FROM interesse WHERE categoriaProdutoID = :categoriaProdutoID AND usuarioID = :usuarioID");
            $statment->bindParam(':categoriaProdutoID', $categoriaProdutoID);
            $statment->bindParam(':usuarioID', $usuarioID);

            if (!$statment->execute()) {
                $erros = $statment->errorInfo();
                throw new Exception("Erro InteresseDAO: " . $erros[2]);
            }
        } catch (PDOException $err) {
            throw new Exception("Erro InteresseDAO:" . $err->getMessage());
        }
    }

    public function listarCategoriaProdutoPorCliente($pagina = 0, $usuarioID = -1) {
        try {

            $limite = Util::getPaginacao($pagina);
            $where = $this->getWhere(-1, $usuarioID);
            $categoriaProduto = array();
            $statment = $this->conexao->query("SELECT * FROM interesse u $where $limite");

            foreach ($statment->fetchAll(PDO::FETCH_SERIALIZE) as $row){
                $bn = $this->categoriaProdutoDAO->buscarPorID($row['categoriaProdutoID']);
                $categoriaProduto[] =  $bn;
            }

            return $categoriaProduto;
        } catch (PDOException $err) {
            throw new Exception("Erro InteresseDAO:" . $err->getMessage());
        }
    }

    public function listarClientesPorCategoriaProduto($pagina = 0, $categoriaProdutoID = -1) {
        try {

            $limite = Util::getPaginacao($pagina);
            $where = $this->getWhere($categoriaProdutoID, -1);
            $clientes = array();
            $statment = $this->conexao->query("SELECT * FROM interesse u $where $limite");

            foreach ($statment->fetchAll(PDO::FETCH_SERIALIZE) as $row){
                $cli = $this->clienteDAO->buscarPorID($row['usuarioID'], false);
                $clientes[] =  $cli;
            }

            return $clientes;
        } catch (PDOException $err) {
            throw new Exception("Erro InteresseDAO:" . $err->getMessage());
        }
    }


    public function existe($categoriaProdutoID = -1, $usuarioID = -1){
        if($this->buscarPorID($categoriaProdutoID, $usuarioID) != null)
            return true;
        return false;
    }

    private function getWhere($categoriaProdutoID = -1, $usuarioID = -1) {

        $where = " WHERE 1 = 1 ";

        if (isset($categoriaProdutoID) && $categoriaProdutoID > 0) {
            $where = $where . " AND u.categoriaProdutoID = $categoriaProdutoID ";
        }

        if (isset($usuarioID) && $usuarioID > 0) {
            $where = $where . " AND u.usuarioID = $usuarioID ";
        }

        return $where;
    }

    public function total($categoriaProdutoID = -1, $usuarioID = -1) {
        try {

            $where = $this->getWhere($categoriaProdutoID, $usuarioID);
            $total = $this->conexao->query("SELECT COUNT(u.interesseID) total FROM interesse u $where")->fetch(PDO::FETCH_COLUMN);
            return $total;
        } catch (PDOException $err) {
            throw new Exception("Erro InteresseDAO:" . $err->getMessage());
        }
    }

}
?>